/**
 * 系统主面板，用标签页来显示打开的各个模块。
 * 标签页支持右键菜单的关闭事件和双击事件。
 * @author linzongxue
 * @create_date 2011-12-19
 */
define(function(){
	var AppMainPanel = Ext.extend(Ext.TabPanel, {
		region: 'center', 
		resizeTabs: true,
        minTabWidth: 80,
        tabWidth: 100,
        enableTabScroll: true,
        plugins: new Ext.ux.TabCloseMenu(),
        /**
         * override: 添加标签页双击事件
         */
        initEvents: function(){
        	this.mon(this.strip,'dblclick', this.onTitleDbClick, this);
        	AppMainPanel.superclass.initEvents.call(this);
        },
        /**
         * 双击事件，关闭标签页。
         * 注意：如果是调试模式，关闭标签页后再重新打开标签页，
         * 目的在于重新加载此标签页关联的js模块代码，避免经常要刷新首页降低开发效率。
         */
        onTitleDbClick: function(e,target,o){
        	var panel = this.findTargets(e).item;
        	if (panel.fireEvent('beforeclose', panel) === false) return;
        	panel.fireEvent('close', panel);
        	this.remove(panel);
        	//调试模式，重新加载标签页
        	if(DEBUG){
    			au.openTab(panel.menuId, panel.jsModule, panel.title);
        	}
        },
        /**
         * 在cookie中保存从菜单中打开的标签页的菜单id。
         * 保存格式为：(激活id:id1,id2,id3)
         */
        saveOpenedTabMenuIds: function(){
    		var openedTabMenuIds = [];
    		this.items.each(function(item){
    			if(item.menuId) openedTabMenuIds.push(item.menuId);
    		});
    		var value = openedTabMenuIds.join(',');
    		if (this.getActiveTab() && this.getActiveTab().menuId){ //记得当前激活的标签
    			value = this.getActiveTab().menuId + ':' + value;
    		}
    		au.setCookie('openedTabMenuIds', value);
    	},
    	/**
    	 * 打开上次关闭浏览器打开的标签页，由于是异步加载，不一定保证标签页的顺序
    	 */
    	openLastTabs: function(){
    		var lastActiveMenuId;
    		var openedTabMenuIds = au.getCookie('openedTabMenuIds');
    		if (!openedTabMenuIds) return;
    		var temp = openedTabMenuIds.split(':');
    		if (temp.length > 1){
    			lastActiveMenuId = temp[0];
    			openedTabMenuIds = temp[1];
    		}
    		Ext.each(openedTabMenuIds.split(','), function(id){
    			if (!au.permit(id)) return;
    			cu.get({
    				url: 'sys/menu/get.do',
    				params: {fullPath:true, id:id},
    				success: function(menu){
    					if (!menu) return;
    					var active = (lastActiveMenuId == menu.id);
    					au.openTab(menu.id, menu.value, menu.text, menu.fullPath, false, !active);
    				}
    			});
    		});
    	}
	});
	return AppMainPanel;
});